package com.jvm.synchronizedp;

// synchronized 作用于静态方法

/**
 *
 * 当 synchronized 作用于静态方法时，锁的对象就是当前类的 Class 对象。
 *
 */
public class Demo3 {

    static int num = 0;

    public static synchronized void m1() {
        for (int i = 0; i < 10000; i++) {
            num++;
        }
    }

    // m2 方法与 m1 方法都是锁 Demo3.class 对象
    public static void m2() {
        synchronized (Demo3.class) {
            for (int i = 0; i < 10000; i++) {
                num++;
            }
        }
    }

    public static class T1 extends Thread {
        @Override
        public void run() {
            Demo3.m1();
        }
    }

    public static void main(String[] args) throws InterruptedException {
        T1 t1 = new T1();
        T1 t2 = new T1();
        T1 t3 = new T1();
        t1.start();
        t2.start();
        t3.start();

        // 等待三个线程结束打印num
        t1.join();
        t2.join();
        t3.join();

        System.out.println(Demo3.num);
        /**
         *
         * 打印结果：
         *     30000
         *
         */
    }

}
